Next: Rough GIMPLE Grammar, Previous: Statements, Up: GIMPLE

#### 10.2.5 GIMPLE Example

         struct A { A(); ~A(); };

         int i;
         int g();
         void f()
         {
           A a;
           int j = (--i, i ? 0 : 1);

           for (int x = 42; x > 0; --x)
             {
               i += g()*4 + 32;
             }
         }

becomes

         void f()
         {
           int i.0;
           int T.1;
           int iftmp.2;
           int T.3;
           int T.4;
           int T.5;
           int T.6;

           {
             struct A a;
             int j;

             __comp_ctor (&a);
             try
               {
                 i.0 = i;
                 T.1 = i.0 - 1;
                 i = T.1;
                 i.0 = i;
                 if (i.0 == 0)
                   iftmp.2 = 1;
                 else
                   iftmp.2 = 0;
                 j = iftmp.2;
                 {
                   int x;

                   x = 42;
                   goto test;
                   loop:;

                   T.3 = g ();
                   T.4 = T.3 * 4;
                   i.0 = i;
                   T.5 = T.4 + i.0;
                   T.6 = T.5 + 32;
                   i = T.6;
                   x = x - 1;

                   test:;
                   if (x > 0)
                     goto loop;
                   else
                     goto break_;
                   break_:;
                 }
               }
             finally
               {
                 __comp_dtor (&a);
               }
           }
         }